#!/usr/bin/env python
import PySimpleGUI as sg
import os
import mido
import time

"""
    Copyright 2023 PySimpleSoft, Inc. and/or its licensors. All rights reserved.

    Redistribution, modification, or any other use of PySimpleGUI or any portion thereof is subject to the terms of the PySimpleGUI License Agreement available at https://eula.pysimplegui.com.

    You may not redistribute, modify or otherwise use PySimpleGUI or its contents except pursuant to the PySimpleGUI License Agreement.
"""

PLAYER_COMMAND_NONE = 0
PLAYER_COMMAND_EXIT = 1
PLAYER_COMMAND_PAUSE = 2
PLAYER_COMMAND_NEXT = 3
PLAYER_COMMAND_RESTART_SONG = 4

helv15 = 'Helvetica 15'


# ---------------------------------------------------------------------- #
#    PlayerGUI             CLASS                                         #
# ---------------------------------------------------------------------- #


class PlayerGUI():
    '''
    Class implementing GUI for both initial screen but the player itself
    '''

    def __init__(self):
        self.Window = None
        self.TextElem = None
        # use to get the list of midi ports
        self.PortList = mido.get_output_names()
        # reverse the list so the last one is first
        self.PortList = self.PortList[::-1]

    # ---------------------------------------------------------------------- #
    #  PlayerChooseSongGUI                                                   #
    #   Show a GUI get to the file to playback                               #
    # ---------------------------------------------------------------------- #
    def PlayerChooseSongGUI(self):

        # ---------------------- DEFINION OF CHOOSE WHAT TO PLAY GUI ----------------------------

        helv = ("Helvetica", 15)
        layout = [[sg.Text('MIDI File Player', font=helv15, size=(20, 1), text_color='green')],
                  [sg.Text('File Selection', font=helv15, size=(20, 1))],
                  [sg.Text('Single File Playback', justification='right'),
                      sg.InputText(size=(65, 1), key='midifile'),
                      sg.FileBrowse(size=(10, 1), file_types=(("MIDI files", "*.mid"),))],
                  [sg.Text('Or Batch Play From This Folder', auto_size_text=False, justification='right'),
                      sg.InputText(size=(65, 1), key='folder'),
                      sg.FolderBrowse(size=(10, 1))],
                  [sg.Text('_' * 250, auto_size_text=False, size=(100, 1))],
                  [sg.Text('Choose MIDI Output Device', size=(22, 1)),
                   sg.Listbox(values=self.PortList, size=(30, len(self.PortList) + 1), default_values=(self.PortList[0],), key='device')],
                  [sg.Text('_' * 250, auto_size_text=False, size=(100, 1))],
                  [sg.SimpleButton('PLAY', size=(12, 2), button_color=('red', 'white'), font=helv15, bind_return_key=True),
                      sg.Text(' ' * 2, size=(4, 1)),
                      sg.Cancel(size=(8, 2), font=helv15)]]

        window = sg.Window('MIDI File Player', layout, auto_size_text=False, default_element_size=(30, 1), font=helv)
        self.Window = window
        return window.read()

    def PlayerPlaybackGUIStart(self, NumFiles=1):
        # -------  Make a new FlexForm  ------- #

        self.TextElem = sg.Text('Song loading....',
            size=(70, 5 + NumFiles),
            font=("Helvetica", 14), auto_size_text=False)
        self.SliderElem = sg.Slider(range=(1, 100),
            size=(50, 8),
            orientation='h', text_color='#f0f0f0')

        def pbutton(image_data, key):
            return sg.Button(image_data=image_data, key=key, image_size=(50,50), image_subsample=2, border_width=0, button_color=(sg.theme_background_color(), sg.theme_background_color()))

        layout = [
            [sg.Text('MIDI File Player', size=(30, 1), font=("Helvetica", 25))],
            [self.TextElem],
            [self.SliderElem],
            [pbutton(image_pause,'PAUSE'), sg.Text(' '),
             pbutton(image_next, 'NEXT'), sg.Text(' '),
             pbutton(image_restart, key='Restart Song'), sg.Text(' '),
             pbutton(image_exit, 'EXIT')]
        ]

        window = sg.Window('MIDI File Player', layout, default_element_size=(
            30, 1), font=("Helvetica", 25), finalize=True)
        self.Window = window

    # ------------------------------------------------------------------------- #
    #  PlayerPlaybackGUIUpdate                                                  #
    #   Refresh the GUI for the main playback interface (must call periodically #
    # ------------------------------------------------------------------------- #

    def PlayerPlaybackGUIUpdate(self, DisplayString):
        window = self.Window
        # if the widnow has been destoyed don't mess with it
        if 'window' not in locals() or window is None:
            return PLAYER_COMMAND_EXIT
        self.TextElem.update(DisplayString)
        event, (values) = window.read(timeout=0)
        if event == sg.WIN_CLOSED:
            return PLAYER_COMMAND_EXIT
        if event == 'PAUSE':
            return PLAYER_COMMAND_PAUSE
        elif event == 'EXIT':
            return PLAYER_COMMAND_EXIT
        elif event == 'NEXT':
            return PLAYER_COMMAND_NEXT
        elif event == 'Restart Song':
            return PLAYER_COMMAND_RESTART_SONG
        return PLAYER_COMMAND_NONE


# ---------------------------------------------------------------------- #
# MAIN - our main program... this is it                                  #
#   Runs the GUI to get the file / path to play                          #
#   Decodes the MIDI-Video into a MID file                               #
#   Plays the decoded MIDI file                                          #
# ---------------------------------------------------------------------- #
def main():
    def GetCurrentTime():
        '''
        Get the current system time in milliseconds
        :return: milliseconds
        '''
        return int(round(time.time() * 1000))

    pback = PlayerGUI()

    button, values = pback.PlayerChooseSongGUI()
    if button != 'PLAY':
        sg.popup_cancel('Cancelled...\nAutoclose in 2 sec...',
                        auto_close=True, auto_close_duration=2)
        return
    if values['device']:
        midi_port = values['device'][0]
    else:
        sg.popup_cancel('No devices found\nAutoclose in 2 sec...',
                        auto_close=True, auto_close_duration=2)

    batch_folder = values['folder']
    midi_filename = values['midifile']
    # ------ Build list of files to play --------------------------------------------------------- #
    if batch_folder:
        filelist = os.listdir(batch_folder)
        filelist = [batch_folder+'/' +
                    f for f in filelist if f.endswith(('.mid', '.MID'))]
        filetitles = [os.path.basename(f) for f in filelist]
    elif midi_filename:       # an individual filename
        filelist = [midi_filename, ]
        filetitles = [os.path.basename(midi_filename), ]
    else:
        sg.popup_error('*** Error - No MIDI files specified ***')
        return

    # ------ LOOP THROUGH MULTIPLE FILES --------------------------------------------------------- #
    pback.PlayerPlaybackGUIStart(NumFiles=len(filelist) if len(filelist) <= 10 else 10)
    port = None
    
    # Loop through the files in the filelist
    for now_playing_number, current_midi_filename in enumerate(filelist):
        display_string = 'Playing Local File...\n{} of {}\n{}'.format(
            now_playing_number+1, len(filelist), current_midi_filename)
        midi_title = filetitles[now_playing_number]
        # --------------------------------- REFRESH THE GUI ----------------------------------------- #
        pback.PlayerPlaybackGUIUpdate(display_string)

        # ---===--- Output Filename is .MID --- #
        midi_filename = current_midi_filename

        # --------------------------------- MIDI - STARTS HERE ----------------------------------------- #
        if not port:            # if the midi output port not opened yet, then open it
            port = mido.open_output(midi_port if midi_port else None)

        try:
            mid = mido.MidiFile(filename=midi_filename)
        except:
            print(' Fail at playing Midi file = {}****'.format(midi_filename))
            sg.popup_error('Exception trying to play MIDI file:',
                           midi_filename, 'Skipping file')
            continue

        # Build list of data contained in MIDI File using only track 0
        midi_length_in_seconds = mid.length
        display_file_list = '>> ' + \
            '\n'.join([f for i, f in enumerate(
                filetitles[now_playing_number:]) if i < 10])
        paused = cancelled = next_file = False
        ######################### Loop through MIDI Messages ###########################
        while True :
            start_playback_time = GetCurrentTime()
            port.reset()

            for midi_msg_number, msg in enumerate(mid.play()):
                #################### GUI - read values ##################
                if not midi_msg_number % 4:              # update the GUI every 4 MIDI messages
                    t = (GetCurrentTime() - start_playback_time)//1000
                    display_midi_len = '{:02d}:{:02d}'.format(
                        *divmod(int(midi_length_in_seconds), 60))
                    display_string = 'Now Playing {} of {}\n{}\n              {:02d}:{:02d} of {}\nPlaylist:'.\
                        format(now_playing_number+1, len(filelist), midi_title, *divmod(t, 60), display_midi_len)
                    # display list of next 10 files to be played.
                    pback.SliderElem.update(t, range=(1, midi_length_in_seconds))
                    rc = pback.PlayerPlaybackGUIUpdate(
                        display_string + '\n' + display_file_list)
                else:       # fake rest of code as if GUI did nothing
                    rc = PLAYER_COMMAND_NONE
                if paused:
                    rc = PLAYER_COMMAND_NONE
                    while rc == PLAYER_COMMAND_NONE:        # TIGHT-ASS loop waiting on a GUI command
                        rc = pback.PlayerPlaybackGUIUpdate(display_string)
                        time.sleep(.25)

                ####################################### MIDI send data ##################################
                port.send(msg)

                # -------  Execute GUI Commands  after sending MIDI data ------- #
                if rc == PLAYER_COMMAND_EXIT:
                    cancelled = True
                    break
                elif rc == PLAYER_COMMAND_PAUSE:
                    paused = not paused
                    port.reset()
                elif rc == PLAYER_COMMAND_NEXT:
                    next_file = True
                    break
                elif rc == PLAYER_COMMAND_RESTART_SONG:
                    break

            if cancelled or next_file:
                break
        #------- DONE playing the song   ------- #
        port.reset()                    # reset the midi port when done with the song

        if cancelled:
            break


# ---------------------------------------------------------------------- #
#  LAUNCH POINT -- program starts and ends here                          #
# ---------------------------------------------------------------------- #

image_exit = b'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'


image_next = b'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxIAAAsSAdLdfvwAAB8WSURBVHhezZ17sJZVvccfN8ZFASER2GyQ5KLizgtC4x3MQjPUtJS0qaYxm2aOnVNNnZrKM+lMTae/Ujs459SMWmraTsyOIaOmJ0jykopIXFS2RggbNijiVm6Fnt9n8X5ff/vHet797s3e4HfmO2s961nPb631/T3r8lze5z2oeA+jqalpUENDw5jx48c3jhw5ctKQIUOOPeaYY462XaOMQxwHG8Gbxg7Hjc8///wLHR0dq9rb21evWbOm7e23316/bt267bbvPYn3jEMOOuig4n3ve1//iRMnjm5ubp5hzjjniCOOONUc0mi7hxobUkbDO++8U4nVBjYd3ja+YQ5p27Rp0+PmlEeWL1++qLW1dcM//vGPXfXa7GsccIeMGDGi36RJk44/7rjj5pgzZltSs7Ef+6JIPRUtOMZv7zYuN6fMX7FiRcvq1auXbd68mbQDhgPikIMPPvggc8IYc8InrDd8bsCAASdY8iHs86LXE68F74g64tt27tz5nPWa28w5vzPnrP/nP//ZszNgH7DfHTJlypTJM2fOvNqGpM/b5nDScmLXG5ZBQtcbAhffYkPaLxcuXDh35cqVL1bS9gverU0fwnpEg/WIKTNmzPi6OeJSa/hhpOdEFuN2TFM8By92jJeladuHZn+rOebuRYsW/cR6zErrMcxDfYo9JfchzBHDPvrRj17b2Nh4pW2yIioVF9qkW43XSoM6zsOLGmkLhJpp/jjFK+hoa2u7+Q9/+MO15pjXK2l9gj5zyPvf//7+1iPmnHjiiT+who0nLQrpiehirW1/DMxBooqILuEVL9v29LaAlbdm6dKl11iPaXnttdd2pcReRq87hMofddRRE+bMmXODTdbnW1I/CeeFhF50cffu3dm4qONkIweJmBMd9uvXLxv3lA1Rdg27bfJf0NLS8tWXX375pbI69BS96hBrSMMFF1zwqZNOOum/bHMkaV44L6iI6LWoPIg0cODAYtCgQcVhhx2WQrtuKfr3759CYNcTxa5du1K4ffv2YuvWrSncsWNHsiPxCWuRPCJOIATeOYb2Z5999iu///3v55ntXptbes0hdj0x+OKL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'

image_pause = b'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'

image_restart = b'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'



if __name__ == '__main__':
    main()
